import { message } from 'ant-design-vue'
import axios, {
  type AxiosError,
  type AxiosInstance,
  type AxiosResponse,
  type InternalAxiosRequestConfig,
} from 'axios'

// 定义返回数据的结构，根据实际后端接口调整
export interface Result<T = any> {
  code: number
  message: string
  data: T
}

const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
  timeout: 10000,
})

// 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在发送请求之前做些什么
    // const token = localStorage.getItem('token')
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`
    // }
    return config
  },
  (error: AxiosError) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  },
)

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 2xx 范围内的状态码都会触发该函数
    return response.data
  },
  (error: AxiosError) => {
    // 超出 2xx 范围的状态码都会触发该函数
    const { response } = error
    if (response) {
      switch (response.status) {
        case 401:
          message.error('未授权，请登录')
          // router.push('/login')
          break
        case 403:
          message.error('拒绝访问')
          break
        case 404:
          message.error('请求资源未找到')
          break
        case 500:
          message.error('服务器错误')
          break
        default:
          message.error(`连接错误: ${response.status}`)
      }
    } else {
      if (error.message.includes('timeout')) {
        message.error('请求超时')
      } else {
        message.error('网络连接错误')
      }
    }
    return Promise.reject(error)
  },
)

export default service
